﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace HTTT.Utilities
{

    /// <summary>
    /// Request status
    /// </summary>
    public enum HT_REQUESTSTATUS
    {
        PEDDING
        , APPROVED
        , REJECT
        , CANCELED
    }

    /// <summary>
    /// Action with AD
    /// </summary>
    public enum HT_ACTION
    {
        ADD_USER
        , EDIT_USER
        , DELETE_USER
        , RESET_USER
        , BLOCK_USER
        , UN_BLOCK_USER
        , ADD_GROUP
        , EDIT_GROUP
        , DELETE_GROUP
        , EDIT_GROUP_MEMBER
        , ADD_OU
        , RENAME_OU
        , MOVE_OU
        , DELETE_OU
        // Remember to add logic to func GetNameOfAction() below when added new action
    }

    public static class Common
    {
        public static string GetNameOfAction(string action)
        {
            switch (action)
            {
                case "ADD_USER":
                    return "Thêm mới người dùng";
                case "EDIT_USER":
                    return "Sửa thông tin người dùng";
                case "DELETE_USER":
                    return "Xóa người dùng";
                case "RESET_USER":
                    return "Đặt lại mật khẩu người dùng";
                case "BLOCK_USER":
                    return "Khóa tài khoản";
                case "UN_BLOCK_USER":
                    return "Mở khóa tài khoản";
                case "ADD_GROUP":
                    return "Thêm mới nhóm người dùng";
                case "EDIT_GROUP":
                    return "Sửa thông tin nhóm người dùng";
                case "DELETE_GROUP":
                    return "Xóa nhóm người dùng";
                case "EDIT_GROUP_MEMBER":
                    return "Sửa thông tin nhóm người dùng";
                case "ADD_OU":
                    return "Thêm mới OU";
                case "RENAME_OU":
                    return "Đổi tên OU";
                case "MOVE_OU":
                    return "Di chuyển OU";
                case "DELETE_OU":
                    return "Xóa OU";
                default:
                    return "";
            }
        }


        public static string GetYoutubeThumb(string youtubeID)
        {
            return "http://i.ytimg.com/vi/" + youtubeID + "/mqdefault.jpg";
        }

        public static int CountIEnumberable(this IEnumerable source)
        {
            int res = 0;
            foreach (var item in source)
            {
                res++;
            }
            return res;
        }

        /// <summary>
        /// Ham bo dau tieng viet
        /// </summary>
        /// <param name="str">input string</param>
        /// <returns>return string</returns>
        public static string RemoveSign(string str)
        {
            string[] signs = new string[] { 
                            "aAeEoOuUiIdDyY",
                            "áàạảãâấầậẩẫăắằặẳẵ",
                            "ÁÀẠẢÃÂẤẦẬẨẪĂẮẰẶẲẴ",
                            "éèẹẻẽêếềệểễ",
                            "ÉÈẸẺẼÊẾỀỆỂỄ",
                            "óòọỏõôốồộổỗơớờợởỡ",
                            "ÓÒỌỎÕÔỐỒỘỔỖƠỚỜỢỞỠ",
                            "úùụủũưứừựửữ",
                            "ÚÙỤỦŨƯỨỪỰỬỮ",
                            "íìịỉĩ",
                            "ÍÌỊỈĨ",
                            "đ",
                            "Đ",
                            "ýỳỵỷỹ",
                            "ÝỲỴỶỸ"
            };
            for (int i = 1; i < signs.Length; i++)
            {
                for (int j = 0; j < signs[i].Length; j++)
                {
                    str = str.Replace(signs[i][j], signs[0][i - 1]);
                }
            }
            return str;
        }

        public static string FormatAlertMsg(string msg)
        {
            string script = "alert('";
            script += msg;
            script += "');";
            return script;
        }


        /// <summary>
        /// Usage:ClientScript.RegisterStartupScript(this.GetType(), "Redirect", script, true);
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="redirecturl"></param>
        public static string FormatMsgThenRedirect(string msg, string redirecturl)
        {
            string script = "window.onload = function(){ alert('";
            script += msg;
            script += "');";
            script += "window.location = '";
            script += redirecturl;
            script += "'; }";
            return script;
        }

        public static string Second2Munite(double second)
        {
            StringBuilder sb = new StringBuilder();
            TimeSpan time = TimeSpan.FromSeconds(second);
            if (time.Hours > 0)
            {
                sb.Append(time.Hours);
                sb.Append(":");
            }
            if (time.Minutes > 0)
            {
                sb.Append(time.Minutes);
                sb.Append(":");
            }
            sb.AppendFormat("{0:00}", time.Seconds);
            return sb.ToString();
        }
        public static string Second2Munite(string second)
        {
            double Temp = 0;
            if (double.TryParse(second, out Temp))
            {
                return Second2Munite(Temp);
            }
            return "";
        }
    }

    public class ReturnValue<T>
    {
        private T _retValue;
        private string _msg;
        public ReturnValue(T inA, string inMgs)
        {
            _retValue = inA;
            _msg = inMgs;
        }

        public T RetValue
        {
            get { return _retValue; }
            set { _retValue = value; }
        }
        public string Msg
        {
            get { return _msg; }
            set { _msg = value; }
        }

    }

    public class HT_AuthenticateInfo
    {
        public string Domain { get; set;}
        public string Path { get; set; }
        public string Username { get; set; }
        public string Password { get; set; }
        public HT_AuthenticateInfo(string domain, string path, string username, string password)
        {
            Domain = domain;
            Path = path;
            Username = username;
            Password = password;
        }
    }
    public class HT_UserLoginCount
    {
        public string UserName { get; set; }
        public Int32 LoginCount { get; set; }
        public HT_UserLoginCount() { }
        public HT_UserLoginCount(string username, Int32 loginCount)
        {
            UserName = username;
            LoginCount = loginCount;
        }
    }
}
